/**
 * date.c
 * Implementasi untuk modul date
 * ADT Date, struktur data tanggal
 * Fri, 4 Dec 2009
 * By Mahful Bahri 13208058
 * */

#include "date.h"

Time ParseTime(string s) {
	Time t;
		
	sscanf(s.s , "%d:%d:%d" , &(t.h) , &(t.m) , &(t.s));
	
	return t;
}

Date ParseDate(string s) {
	Date d;
	
	sscanf(s.s , "%d-%d-%d" , &(d.d) , &(d.m) , &(d.y));
	
	return d;
}

boolean IsDateLt(Date d1 , Date d2) {
	return (d1.y < d2.y) || (d1.y == d2.y && d1.m < d2.m) || (d1.y == d2.y && d1.m == d2.m && d1.d < d2.d);
}

boolean IsDateEqual(Date d1 , Date d2) {
	return d1.y == d2.y && d1.m == d2.m && d1.d == d2.d;
}

boolean IsTimeLt(Time t1 , Time t2) {
	return (t1.h < t2.h) || (t1.h == t2.h && t1.m < t2.m) || (t1.h == t2.h && t1.m == t2.m && t1.s < t2.s);
}

boolean IsTimeEqual(Time t1 , Time t2) {
	return t1.h == t2.h && t1.m == t2.m && t1.s == t2.s;
}

Date GetCurrentDate() {
	time_t rawtime;
	struct tm * timeinfo;
	char buffer [80];

	time ( &rawtime );
	timeinfo = localtime ( &rawtime );
	
	//Mengambil dari sistem
	strftime (buffer,80,"%d-%m-%Y",timeinfo);
	//puts (buffer);
	
	return ParseDate(CharToString(buffer));
}

Time GetCurrentTime() {
	time_t rawtime;
	struct tm * timeinfo;
	char buffer [80];

	time ( &rawtime );
	timeinfo = localtime ( &rawtime );

	//Mengambil dari sistem
	strftime (buffer,80,"%H:%M:%S",timeinfo);
	//puts (buffer);
	
	return ParseTime(CharToString(buffer));
}


string DateToString(Date d) {
	char s[MaxStringLength];
	sprintf(s , "%02d-%02d-%02d" , d.d , d.m , d.y);
	return CharToString(s);
}

string TimeToString(Time t) {
	char s[MaxStringLength];
	sprintf(s , "%02d:%02d:%02d" , t.h , t.m , t.s);
	return CharToString(s);
}
